<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>

</body>

</html>
<script>
    // function MyClass(x, y) {
    //     this.x = x;
    //     this.y = y;
    // }
    // MyClass.prototype.show = function () {
    //     console.log(this.x, this.y)
    // }
    // var obj = new MyClass(3, 2)
    // obj.show()
    // var obj = 2
    // Number.prototype.sssss = function () {
    //     // console.log("这样改变原型")
    //     return 5
    // }
    // console.log(obj.sssss())


    // 原型链的具体事例
    // function MyClass() {
    //     this.x = "x  in myClass"
    // }
    // var obj = new MyClass()
    // console.log(obj.x)
    // console.log(obj.z)

    // MyClass.prototype.z = "z in MyClass.prototype"
    // console.log(obj.z)
    // var obj2 = new MyClass()
    // console.log(obj.x+ '___' + obj.z)

    //属性写入
    // console.log("属性写入______________________________________________")

    // function MyClass() {
    //     this.x = "x in myclass"
    // }
    // MyClass.prototype.y = " y in myclass prototype"

    // var obj = new MyClass()
    // console.log(obj.y)
    // obj.y = "给obj添加y属性"
    // console.log(obj.y)

    // var obj2 = new MyClass()
    // console.log(obj2.y)

    // //属性删除
    // console.log("属性删除________________________")
    // delete obj.y
    // console.log(obj.y)
    // delete obj2.y
    // console.log(obj2.y)
    // console.log("delete无法删除原型中的属性")

    // // // 原型继承与类

    // console.log(obj.toString())
    // console.log(obj.hasOwnProperty("toString"))
    // console.log(Object.prototype.hasOwnProperty("toString"))
    // console.log(obj.__proto__ == MyClass.prototype)


    // 获取原型对象的三种方法

    function MyClass() {}
    var Proto = MyClass.prototype
    var obj = new MyClass()
    // 通过对象实例取得
    var Proto = Object.getPrototypeOf(obj)
    console.log(Proto)
    // 通过对象实例取得
    var Proto = obj.__proto__
    console.log(Proto)
    //通过对象实例以及其构造函数取得(无法确保总是有效)
    var Proto = obj.constructor.prototype
    console.log(Proto)

    console.log(obj.constructor === MyClass)
</script>